Merge with xen-ia64-unstable.hg
authorkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Wed, 28 Mar 2007 09:38:41 +0000 (10:38 +0100)
committerkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Wed, 28 Mar 2007 09:38:41 +0000 (10:38 +0100)
1  2 
xen/arch/ia64/xen/mm.c

index 9447ee4bb3fedfc96ec9b2667b113627bf4e3578,e9b8bc17abb0dbc2e6c34047f3bbdfea27be2bdb..e055757cc2632e56aae4c0d313a330325f50e0af
@@@ -1193,21 -1200,9 +1193,21 @@@ assign_domain_page_cmpxchg_rel(struct d
      BUG_ON(old_mfn == new_mfn);
  
      set_gpfn_from_mfn(old_mfn, INVALID_M2P_ENTRY);
 +    if (likely(clear_PGC_allocate)) {
 +        if (!test_and_clear_bit(_PGC_allocated, &old_page->count_info))
 +            BUG();
 +    } else {
 +        int ret;
 +        // adjust for count_info for domain_page_flush_and_put()
 +        // This is slow path.
 +        BUG_ON(!test_bit(_PGC_allocated, &old_page->count_info));
 +        BUG_ON(d == NULL);
 +        ret = get_page(old_page, d);
 +        BUG_ON(ret == 0);
 +    }
  
      domain_page_flush_and_put(d, mpaddr, pte, old_pte, old_page);
-     perfc_incrc(assign_domain_pge_cmpxchg_rel);
+     perfc_incr(assign_domain_pge_cmpxchg_rel);
      return 0;
  }
  
@@@ -1264,9 -1258,13 +1264,9 @@@ zap_domain_page_one(struct domain *d, u
      page = mfn_to_page(mfn);
      BUG_ON((page->count_info & PGC_count_mask) == 0);
  
 -    // exchange_memory() calls
 -    //   steal_page()
 -    //     page owner is set to NULL
 -    //   guest_physmap_remove_page()
 -    //     zap_domain_page_one()
 -    domain_put_page(d, mpaddr, pte, old_pte, (page_get_owner(page) != NULL));
 +    BUG_ON(clear_PGC_allocate && (page_get_owner(page) == NULL));
 +    domain_put_page(d, mpaddr, pte, old_pte, clear_PGC_allocate);
-     perfc_incrc(zap_dcomain_page_one);
+     perfc_incr(zap_dcomain_page_one);
  }
  
  unsigned long
@@@ -1278,8 -1276,8 +1278,8 @@@ dom0vp_zap_physmap(struct domain *d, un
          return -ENOSYS;
      }
  
 -    zap_domain_page_one(d, gpfn << PAGE_SHIFT, INVALID_MFN);
 +    zap_domain_page_one(d, gpfn << PAGE_SHIFT, 1, INVALID_MFN);
-     perfc_incrc(dom0vp_zap_physmap);
+     perfc_incr(dom0vp_zap_physmap);
      return 0;
  }
  
@@@ -1565,10 -1563,9 +1565,10 @@@ destroy_grant_host_mapping(unsigned lon
      /* try_to_clear_PGC_allocate(d, page) is not needed. */
      BUG_ON(page_get_owner(page) == d &&
             get_gpfn_from_mfn(mfn) == gpfn);
 +    BUG_ON(pte_pgc_allocated(old_pte));
      domain_page_flush_and_put(d, gpaddr, pte, old_pte, page);
  
-     perfc_incrc(destroy_grant_host_mapping);
+     perfc_incr(destroy_grant_host_mapping);
      return GNTST_okay;
  }
  
@@@ -1718,8 -1731,8 +1718,8 @@@ guest_physmap_remove_page(struct domai
                            unsigned long mfn)
  {
      BUG_ON(mfn == 0);//XXX
 -    zap_domain_page_one(d, gpfn << PAGE_SHIFT, mfn);
 +    zap_domain_page_one(d, gpfn << PAGE_SHIFT, 0, mfn);
-     perfc_incrc(guest_physmap_remove_page);
+     perfc_incr(guest_physmap_remove_page);
  }
  
  static void